#ifndef __IRQ_H__
#define __IRQ_H__

#include <asm/type.h>

#define PIC_MASTER               0x20		/* 主PIC 的 IO 基址 */
#define PIC_SLAVE                0xA0		/* 从PIC 的 IO 基址 */
#define PIC_COMMAND_MASTER	     PIC_MASTER
#define PIC_DATA_MASTER          (PIC_MASTER+1)
#define PIC_COMMAND_SLAVE        PIC_SLAVE
#define PIC_DATA_SLAVE           (PIC_SLAVE+1)
// IRQs 新的偏移
#define IRQ_MAP_MASTER_OFF       0xe0
#define IRQ_MAP_SLAVE_OFF        (IRQ_MAP_MASTER_OFF+8)

/* 重新初始化 PIC 控制器，为其提供指定的矢量偏移量，而不是默认配置的 8h 和 70h（默认配置） */
#define ICW1_ICW4                0x01		/* 表示将存在 ICW4 */
#define ICW1_SINGLE              0x02		/* 单（级联）模式 */
#define ICW1_INTERVAL4           0x04		/* 调用时间间隔， x86 不需要设置 */
#define ICW1_LEVEL               0x08		/* 用来设置中断检测方式， LTIM 为 0 表示边沿触发， LTIM 为 1 表示电平触发。 */
#define ICW1_INIT                0x10		/* 初始化必须设置! */

#define ICW4_8086                0x01		/* 表示微处理器类型（ microprocessor ），此项是为了兼容老处理器。若 为 0 ，则表示 8080 或 8085 处理器，若 µPM 为 1 ，则表示 x86 处理器。 */
#define ICW4_AUTO                0x02		/* Auto (normal) EOI */
#define ICW4_MASTER              0x04		/* 主PIC */
#define ICW4_BUF                 0x08		/* 缓冲模式 */
#define ICW4_SFNM                0x10		/* 特殊全嵌套模式 */

#define PIC_EOI		0x20		/* 中断结束命令码 */

extern void init_irqs(u32_t master_off, u32_t slave_off);
extern void send_EOI(u8_t irq);

#endif //__IRQ_H__